/******************************************************************************
 * (C) 671643387@qq.com
 */

#ifndef APPLE_THREAD_H
#define APPLE_THREAD_H

#include <Poco/Runnable.h>
#include <Poco/Thread.h>
#include <Poco/Net/SocketReactor.h>

namespace Shared {
    namespace Net {

        /**
         * 网络会话
         */
        class Session;

        /**
         * 网络线程
         */
        class Thread : public Poco::Runnable {
        public:
            Thread(void);
            ~Thread(void);

            /**
             * 启动线程
             */
            void start(void);

            /**
             * 停止线程
             */
            void stop(void);

            /**
             * 等待线程退出
             */
            void join(void);

            /**
             * 获取线程当前负载
             * @return
             */
            int getLoad(void) const { return _load; }

            /**
             * 添加一个网络会话到线程
             * @param session
             */
            void addSession(Session* session);

            /**
             * 从线程移除会话
             * @param session
             */
            void removeSession(Session* session);

        public:
            virtual void run(void);

        private:
            volatile int _load;
            Poco::Thread _thread;
            Poco::Net::SocketReactor _socketReactor;
        };

    }
}

#endif //APPLE_THREAD_H
